package operador.topologia;

import java.util.List;
import java.util.Random;

import base.Particula;
import base.Topologia;

public class Focal implements Topologia{

	private int indiceFoco = -1;
	
	@Override
	public Particula getMelhor(List<Particula> enxame, Integer posicao) {
		if(indiceFoco == -1){
			indiceFoco = new Random().nextInt(enxame.size());
		}
		
		//Se nao for o foco retorna o foco
		if(posicao != indiceFoco){
			return enxame.get(indiceFoco);
		}
		//Se for o foco, encontra a melhor particula do enxame para ser o gBest do foco
		else{
			int melhorVizinha = -1;
			double melhorFitness = Double.MAX_VALUE;
			for(int i=0; i<enxame.size(); i++){
				if(i!= posicao && enxame.get(i).getFitness() < melhorFitness){
					melhorVizinha = i;
					melhorFitness = enxame.get(i).getFitness(); 
				}
			}
			
			return enxame.get(melhorVizinha);
		}
	}

}
